// 118. 杨辉三角
// https://leetcode-cn.com/problems/pascals-triangle/
// 给定一个非负整数 numRows，生成杨辉三角的前 numRows 行。
// 在杨辉三角中，每个数是它左上方和右上方的数的和。

package pascals_triangle

func generate(numRows int) [][]int {

	var res [][]int
	if numRows == 0 {
		return res
	}
	res = append(res, []int{1})
	for i := 1; i < numRows; i++ {
		res = append(res, generateRow(res[i-1]))
	}

	return res
}

func safeGet(row []int, index int) int {

	if 0 <= index && index < len(row) {
		return row[index]
	}

	return 0
}

// generateRow 生成杨辉三角的一行
func generateRow(row []int) []int {
	length := len(row)
	res := make([]int, length+1)
	for i := range row {
		res[i] = safeGet(row, i-1) + safeGet(row, i)
	}

	res[length] = 1

	return res
}
